home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
qbdoors.arc
/
QBDOORS.BAS
< prev
next >
Wrap
BASIC Source File
|
1987-11-23
|
4KB
|
143 lines
' QuickBASIC example of a RBBS 'DOOR'
' by Leo D. Farmer Nov. 23, 1987
'
'
' Set Error Trap & Establish Communications Variables
'
ON ERROR GOTO 10000
OPEN "R",1,"C:MESSAGES"
FIELD 1,128 AS R$
GET 1,2
BPS = VAL(MID$(R$,44,2))
PAR = VAL(MID$(R$,42,2))
RN$ = LEFT$(R$,30)
FOR I = LEN(RN$) TO 1 STEP -1
IF MID$(RN$,I,1) < > " " THEN _
EXIT FOR
NEXT I
RN$ = LEFT$(RN$,I)
IF PAR = -1 THEN _
P$ = "N,8,1,CS,DS,CD" _
ELSE P$ = "E,7,1,CD,DS,CD"
IF BPS = -3 THEN _
B$ = "1200," _
ELSE B$ = "300,"
CLOSE #1
MCR = &H3FC
MSR = &H3FE
CR$ = CHR$(13)
LF$ = CHR$(10)
OPEN "COM1:" + B$ + P$ AS #3
KEY OFF
CLS
'
' Main Program Execution Section
'
LF = 1
RANDOMIZE TIMER
1040 NUMBER = INT(RND(1) * 100) + 1
1050 A$ = ""
GOSUB 2010
A$ = "I have a number between 1 and 100. Type <Q> at any time to quit."
GOSUB 2010
TRY = 1
1070 A$ = "Guess #" + STR$(TRY) + "?"
GOSUB 4010
IF LEFT$(B$,1) = "Q" OR _
LEFT$(B$,1) = "q" THEN _
GOTO 5010
GUESS = VAL(B$)
IF GUESS < 1 OR _
GUESS > 100 OR _
GUESS < > INT(GUESS) THEN _
A$ = "Invalid guess." : _
GOSUB 2010 : _
GOTO 1070
IF GUESS = NUMBER THEN _
A$ = "Yes, that's right!!!" : _
GOSUB 2010 : _
A$ = "Here we go again . . . " : _
GOSUB 2010 : _
GOTO 1040
IF GUESS < NUMBER THEN _
A$ = "Too low." : _
GOSUB 2010 : _
GOTO 1130
A$ = "Too high."
GOSUB 2010
1130 TRY = TRY + 1
GOTO 1070
'
' Print string with carriage return
'
2010 PRINT A$
PRINT #3,A$
PRINT #3,LF$
RETURN
'
' Print string without carriage return
'
3010 PRINT A$;
PRINT #3,A$;
RETURN
'
' Get User Input as B$ (A$ is printed as the question)
'
4010 B$ = ""
GOSUB 3010
4020 WHILE EOF(3) : _
Y$ = INKEY$ : _
IF Y$ < > "" THEN _
GOTO 4050
4030 WEND
4040 Y$ = ""
GOSUB 4170
Y$ = ""
Y$ = INPUT$(1,3)
IF Y$ = CHR$(127) THEN _
GOTO 4140
4050 IF Y$ = CHR$(8) OR _
Y$ = CHR$(7) OR _
Y$ = CHR$(26) OR _
Y$ = CHR$(27) THEN _
GOTO 4140
4060 IF Y$ < " " AND _
Y$ < > CR$ THEN _
GOTO 4020
4070 PRINT Y$;
PRINT #3,Y$;
IF Y$ = CR$ THEN _
GOTO 4120
IF LEN(B$) = > 254 THEN _
A$="Input too long -- Try again" : _
GOSUB 2010 : _
GOTO 4010
4110 B$ = B$ + Y$ : _
GOTO 4020
4120 PRINT #3,LF$
RETURN
4140 IF LEN(B$) = 0 THEN _
GOTO 4020
4150 B$ = LEFT$(B$,LEN(B$) - 1) : _
PRINT CHR$(29); CHR$(32); CHR$(29);
4160 PRINT #3,CHR$(8); CHR$(32); CHR$(8); : _
GOTO 4020
4170 IF INP(MSR) < 128 THEN _
GOTO 5020
RETURN
'
' Return to DOS
'
5010 A$="Now returning to RBBS ..." : _
GOSUB 2010
5020 CLOSE 3 : _
OUT MCR,INP(MCR) OR 1 : _
SYSTEM
'
' Error Trap
'
10000 IF ERR=57 AND ERL=4040 THEN 5020
A$ = "Error #" + STR$(ERR) + "in line" + STR$(ERL) + ". Please tell SYSOP." : _
GOSUB 2010 : _
GOTO 5010